11

使用 Librosa 库,我将音频文件 1319 秒的 MFCC 特征生成为一个矩阵20 X 56829。这里20表示 MFCC 功能的数量(我可以手动调整它)。但我不知道它是如何将音频长度分割成56829. 处理音频所需的帧大小是多少?

import numpy as np
import matplotlib.pyplot as plt
import librosa

def getPathToGroundtruth(episode):
    """Return path to groundtruth file for episode"""
    pathToGroundtruth = "../../../season01/Audio/" \
                        + "Season01.Episode%02d.en.wav" % episode
    return pathToGroundtruth

def getduration(episode):
    pathToAudioFile = getPathToGroundtruth(episode)
    y, sr = librosa.load(pathToAudioFile)
    duration = librosa.get_duration(y=y, sr=sr)
    return duration
def getMFCC(episode):
    filename = getPathToGroundtruth(episode)
    y, sr = librosa.load(filename)  # Y gives 
    data = librosa.feature.mfcc(y=y, sr=sr)
    return data


data = getMFCC(1)
4

1 回答 1

21

简答

您可以通过更改 stft 计算中使用的参数来指定更改长度。以下代码将使您的输出大小加倍(20 x 113658)

data = librosa.feature.mfcc(y=y, sr=sr, n_fft=1012, hop_length=256, n_mfcc=20)

长答案

Librosa 的librosa.feature.mfcc()函数实际上只是作为 librosalibrosa.feature.melspectrogram()函数的包装器(它是librosa.core.stftlibrosa.filters.mel函数的包装器)。

所有与音频信号分割有关的参数——即帧和重叠值——都在梅尔缩放功率谱图函数中指定使用(以及为嵌套核心函数指定的其他可调参数)。您将这些参数指定为函数中的关键字参数librosa.feature.mfcc()

所有额外的**kwargs参数都被馈送到librosa.feature.melspectrogram()并随后被馈送到librosa.filters.mel()

默认情况下,Mel 缩放的功率谱图窗口和跳跃长度如下:

n_fft=2048

hop_length=512

因此,假设您使用默认采样率 ( sr=22050),您的 mfcc 函数的输出是有意义的:

输出长度 = (秒) * (采样率) / (hop_length)

(1319) * (22050) / (512) = 56804个样本

您可以调整的参数如下:

Melspectrogram Parameters
-------------------------
y : np.ndarray [shape=(n,)] or None
    audio time-series

sr : number > 0 [scalar]
    sampling rate of `y`

S : np.ndarray [shape=(d, t)]
    power spectrogram

n_fft : int > 0 [scalar]
    length of the FFT window

hop_length : int > 0 [scalar]
    number of samples between successive frames.
    See `librosa.core.stft`

kwargs : additional keyword arguments
  Mel filter bank parameters.
  See `librosa.filters.mel` for details.

如果要进一步指定用于定义 Mel 缩放功率谱图的 mel 滤波器组的特性,可以调整以下

Mel Frequency Parameters
------------------------
sr        : number > 0 [scalar]
    sampling rate of the incoming signal

n_fft     : int > 0 [scalar]
    number of FFT components

n_mels    : int > 0 [scalar]
    number of Mel bands to generate

fmin      : float >= 0 [scalar]
    lowest frequency (in Hz)

fmax      : float >= 0 [scalar]
    highest frequency (in Hz).
    If `None`, use `fmax = sr / 2.0`

htk       : bool [scalar]
    use HTK formula instead of Slaney

Librosa 的文档:

librosa.feature.mel谱图

librosa.filters.mel

librosa.core.stft

于 2016-08-12T17:29:10.540 回答