批量提取不同文件夹下的wav格式语音数据的梅尔语谱图并保存到相应文件夹中的python代码
时间: 2023-07-31 15:10:37 浏览: 119
可以使用Python中的Librosa库来实现批量提取不同文件夹下的wav格式语音数据的梅尔语谱图并保存到相应文件夹中。以下是实现代码:
```python
import os
import librosa
import numpy as np
# 设置输入和输出文件夹路径
in_folder_path = 'input_folder'
out_folder_path = 'output_folder'
# 定义函数来提取梅尔语谱图并保存到输出文件夹中
def extract_mel_spectrogram(in_file_path, out_folder_path):
# 加载音频文件
y, sr = librosa.load(in_file_path, sr=None)
# 计算梅尔频谱
mel_spectrogram = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128)
# 转换为对数刻度
log_mel_spectrogram = librosa.power_to_db(mel_spectrogram, ref=np.max)
# 获取文件名
file_name = os.path.basename(in_file_path)
# 构造输出文件路径
out_file_path = os.path.join(out_folder_path, file_name.replace('.wav', '.npy'))
# 保存梅尔语谱图
np.save(out_file_path, log_mel_spectrogram)
# 遍历输入文件夹中的所有wav文件并提取梅尔语谱图
for root, dirs, files in os.walk(in_folder_path):
for file in files:
if file.endswith('.wav'):
# 构造输入文件路径
in_file_path = os.path.join(root, file)
# 构造输出文件夹路径
out_sub_folder_path = os.path.join(out_folder_path, os.path.basename(root))
# 如果输出文件夹不存在,则创建它
if not os.path.exists(out_sub_folder_path):
os.makedirs(out_sub_folder_path)
# 提取梅尔语谱图并保存到输出文件夹中
extract_mel_spectrogram(in_file_path, out_sub_folder_path)
```
这段代码将会递归地遍历输入文件夹中的所有子文件夹,并将每个wav文件的梅尔语谱图提取出来并保存到相应的子文件夹中。梅尔频谱图将以Numpy数组的形式保存在.npy文件中。你可以根据实际情况修改代码中的参数,例如n_mels来调整梅尔频谱图的分辨率。
阅读全文