音频文件转语谱图和MFCC并进行FPN融合
将音频文件转化为语谱图和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参数可以根据实际情况调整。- 确保代码中的路径设置正确。
- 这段代码主要展示了音频处理和图像融合的基本思路,具体实现可能需要根据实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/nXRE 著作权归作者所有。请勿转载和采集!