音频文件转换频谱图,并保存为.jpg图片和.npy文件
import glob
import matplotlib.pyplot as plt
import numpy as np
from numpy import save
import os
import librosa
def save_img_and_npy(ad_path, save_path=None):
sep = os.sep
path_template = ad_path + sep + "*.wav"
if save_path is None:
save_path = "result" + sep + os.path.split(ad_path)[-1]
npy_path=save_path+sep+"npy"
img_path = save_path + sep + "image"
if not os.path.exists(npy_path):
os.makedirs(npy_path)
if not os.path.exists(img_path):
os.makedirs(img_path)
hl = 512
hi = 100
wi = 384
fmax = 1200
for ad in glob.glob(path_template):
name = os.path.split(ad)[-1].split(".")[0]
npy_file = npy_path + os.sep + name+".npy"
img_file = img_path + os.sep + name+".jpg"
# 加载音频,return:数据、采样率
y, sr = librosa.load(ad, sr=None)
# # 展示波形图
# plt.figure(figsize=(14, 5))
# librosa.display.waveshow(y, sr=sr)
S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=hi, fmax=fmax, n_fft=2048, hop_length=hl)
# S = np.log(S + 1e-10)
S_dB = librosa.power_to_db(S, ref=np.max)
# print(S_dB.shape)
save(npy_file,S_dB)
librosa.display.specshow(S_dB, x_axis='time', y_axis='mel', sr=sr, fmax=fmax)
plt.savefig(img_file)
##显示
# plt.show()
# plt.close()
if __name__ == '__main__':
#.wav文件的文件夹路径
p_list = [""]
for p in p_list:
save_img_and_npy(p)