语音特征提取(语谱图Spectrogram,Fbank, MFCC, 及其delta-一阶差分)——python代码

导入相关包

import os
import wavio
import numpy as np
import math
from matplotlib import pyplot as plt
from scipy.fftpack import dct
from python_speech_features import mfcc, delta, logfbank

读取语音数据及主函数


for wav in wavs:
	wav_dir = os.path.join(data_dir, wav)
	wav_data = wavio.read(wav_dir)
	data = wav_data.data
	sample_rate = wav_data.rate	#16k
	sampwidth = wav_data.sampwidth
	
	#normalization
	norm_data = data/max(abs(data))
	
	#frames
	frames = frames_crop(norm_data,sample_rate)
	
	#add window
	win = 160
	windows = choose_windows(name = "Hamming",N = win)
	
	#parameters
	N = 2048 #NFFT
	M = 40 #filters number
	num_ceps = 24
	
	#fft
	spe_freqs = np.zeros((frames.shape[0],int(N/2)))	#spectrogram
	fbank_feature = np.zeros((frames.shape[0],M))	#Fbank
	fbank_feature_2 = np.zeros((frames.shape[0],M))	#Fbank second version
	
	mfcc_dct = np.zeros((frames.shape[0],num_ceps))	#dct
	
	
	for i in range(frames.shape[0]):
		frames_fft = np.fft.fft(windows * frames[i],N)
		spe_freqs[i][:] = log_data(np.abs(frames_fft[:int(N/2)]))
		
		filter_banks = mel_filters(sample_rate = sample_rate, NFFT = N, pow_frames = np.abs(frames_fft[:int(N/2
  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
可以使用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来调整梅尔频的分辨率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值