将音频文件转化为语谱图和MFCC,并进行FPN融合

本代码将音频文件转化为语谱图和MFCC,并使用FPN方法进行多层语谱图融合。数据集包含多层子目录,代码支持对所有音频文件进行处理。

1. 音频文件转化为语谱图和MFCC

import os
import librosa
import librosa.display
import numpy as np

# 设置音频文件路径
audio_dir = 'D:/论文代码/data'

# 设置语谱图和MFCC保存路径
spec_dir = 'D:/论文代码/data/spectrograms'
mfcc_dir = 'D:/论文代码/data/mfcc'

# 如果保存路径不存在,则创建
if not os.path.exists(spec_dir):
    os.makedirs(spec_dir)
if not os.path.exists(mfcc_dir):
    os.makedirs(mfcc_dir)

# 设置采样率和帧长
sr = 22050
n_fft = 2048
hop_length = 512

# 遍历所有音频文件
for root, dirs, files in os.walk(audio_dir):
    for file in files:
        # 跳过非音频文件
        if not file.endswith('.wav'):
            continue
        # 读取音频文件
        filepath = os.path.join(root, file)
        y, sr = librosa.load(filepath, sr=sr)
        # 计算语谱图
        S = librosa.stft(y, n_fft=n_fft, hop_length=hop_length)
        Sdb = librosa.amplitude_to_db(np.abs(S), ref=np.max)
        # 保存语谱图
        specpath = os.path.join(spec_dir, file[:-4] + '.png')
        librosa.display.specshow(Sdb, sr=sr, hop_length=hop_length, y_axis='linear', x_axis='time')
        plt.savefig(specpath)
        plt.close()
        # 计算MFCC
        mfcc = librosa.feature.mfcc(y, sr=sr, n_fft=n_fft, hop_length=hop_length, n_mfcc=13)
        # 保存MFCC
        mfccpath = os.path.join(mfcc_dir, file[:-4] + '.npy')
        np.save(mfccpath, mfcc)

2. FPN融合

import os
import numpy as np
from PIL import Image

# 设置语谱图保存路径
spec_dir = 'D:/论文代码/data/spectrograms'

# 设置FPN融合后的语谱图保存路径
spec_fpn_dir = 'D:/论文代码/data/spectrograms_fpn'

# 如果保存路径不存在,则创建
if not os.path.exists(spec_fpn_dir):
    os.makedirs(spec_fpn_dir)

# 设置FPN融合参数
alpha = 0.5
beta = 0.2
gamma = 0.3

# 遍历所有语谱图
for root, dirs, files in os.walk(spec_dir):
    for file in files:
        # 跳过非语谱图文件
        if not file.endswith('.png'):
            continue
        # 读取语谱图
        specpath = os.path.join(root, file)
        spec = Image.open(specpath)
        spec = np.array(spec)
        # 读取上一层语谱图
        parent_dir = os.path.dirname(root)
        parent_specpath = os.path.join(parent_dir, file)
        parent_spec = Image.open(parent_specpath)
        parent_spec = np.array(parent_spec)
        # 读取下一层语谱图
        child_dir = os.path.join(root, os.listdir(root)[0])
        child_specpath = os.path.join(child_dir, file)
        child_spec = Image.open(child_specpath)
        child_spec = np.array(child_spec)
        # 进行FPN融合
        spec_fpn = alpha * spec + beta * parent_spec + gamma * child_spec
        spec_fpn = spec_fpn.astype(np.uint8)
        # 保存FPN融合后的语谱图
        spec_fpnpath = os.path.join(spec_fpn_dir, file)
        spec_fpn = Image.fromarray(spec_fpn)
        spec_fpn.save(spec_fpnpath)

注意:

  • 代码中使用了librosa库进行音频处理,需要提前安装。
  • FPN参数可以根据实际情况调整。
  • 确保代码中的路径设置正确。
  • 这段代码主要展示了音频处理和图像融合的基本思路,具体实现可能需要根据实际情况进行调整。
音频文件转语谱图和MFCC并进行FPN融合

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

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