以下是Python代码实现:

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

# 设置数据集路径
data_path = 'D:/论文代码/data/'

# 定义函数,用于生成语谱图、mfcc图、对数梅尔谱图
def create_spectrogram(audio_path):
    # 读取音频文件
    y, sr = librosa.load(audio_path, sr=44100)

    # 生成语谱图
    D = np.abs(librosa.stft(y))
    fig, ax = plt.subplots()
    img = librosa.display.specshow(librosa.amplitude_to_db(D, ref=np.max),
                                    y_axis='log', x_axis='time', ax=ax)
    fig.colorbar(img, ax=ax)
    ax.set(title='语谱图')
    plt.savefig(os.path.splitext(audio_path)[0] + '_spectrogram.png')
    plt.close()

    # 生成mfcc图
    mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=20)
    fig, ax = plt.subplots()
    img = librosa.display.specshow(mfccs, x_axis='time', ax=ax)
    fig.colorbar(img, ax=ax)
    ax.set(title='MFCC')
    plt.savefig(os.path.splitext(audio_path)[0] + '_mfcc.png')
    plt.close()

    # 生成对数梅尔谱图
    S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128, fmax=8000)
    log_S = librosa.amplitude_to_db(S, ref=np.max)
    fig, ax = plt.subplots()
    img = librosa.display.specshow(log_S, x_axis='time', y_axis='mel', ax=ax)
    fig.colorbar(img, ax=ax)
    ax.set(title='对数梅尔谱图')
    plt.savefig(os.path.splitext(audio_path)[0] + '_mel_spec.png')
    plt.close()

# 遍历数据集目录,生成语谱图、mfcc图、对数梅尔谱图
for root, dirs, files in os.walk(data_path):
    for file in files:
        if file.endswith('.wav'):
            audio_path = os.path.join(root, file)
            create_spectrogram(audio_path)

该代码会遍历数据集目录下的所有.wav文件,生成对应的语谱图、mfcc图、对数梅尔谱图,并保存在同一目录下。例如,数据集目录下有一个子目录'cat',该子目录下有一个音频文件'cat.wav',则生成的语谱图、mfcc图、对数梅尔谱图会分别保存为'cat_spectrogram.png'、'cat_mfcc.png'、'cat_mel_spec.png'。

音频信号特征提取:语谱图、MFCC、对数梅尔谱图生成与保存

原文地址: https://www.cveoy.top/t/topic/nMQq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录